package admin

import (
	"encoding/json"
	"go-cmdb/models"
)

type MenuController struct {
	AdminController
}

func NewMenuController() *MenuController {
	return &MenuController{}
}

func (ctrl *MenuController) Index() {

	ctrl.ViewData(map[string]interface{}{
		"title": "菜单管理",
	})
	return

}
func (ctrl *MenuController) List() {

	list, _ := models.NewMenu().GetAll()
	ctrl.OK(list)
	return

}
func (ctrl *MenuController) Find() {

	id, _ := ctrl.GetUint64("id", 0)
	m, _ := models.NewMenu().Find(id)
	ctrl.OK(m)
	return

}

func (ctrl *MenuController) Add() {
	var req models.AddMenuReq

	if err := json.Unmarshal(ctrl.Ctx.Input.RequestBody, &req); err != nil {
		ctrl.ERROR(err.Error())
		return
	}
	c, _ := models.NewMenu().CountByCode(req.Code)
	if c > 0 {
		ctrl.ERROR("[Code]不能重复")
		return
	}

	curUser, _ := ctrl.GetAuthUser()
	if err := models.NewMenu().Add(curUser.UserID, req); err != nil {
		ctrl.ERROR(err.Error())
		return
	}
	ctrl.OK(nil)
	return
}

func (ctrl *MenuController) Update() {
	var req models.UpdateMenuReq

	if err := json.Unmarshal(ctrl.Ctx.Input.RequestBody, &req); err != nil {
		ctrl.ERROR(err.Error())
		return
	}
	curMenu, _ := models.NewMenu().Find(req.ID)
	if curMenu.Code != req.Code {
		c, _ := models.NewMenu().CountByCode(req.Code)
		if c > 1 {
			ctrl.ERROR("[Code]不能重复")
			return
		}
	}

	curUser, _ := ctrl.GetAuthUser()
	if err := models.NewMenu().Update(curUser.UserID, req); err != nil {
		ctrl.ERROR(err.Error())
		return
	}
	ctrl.OK(nil)
	return
}

func (ctrl *MenuController) Remove() {
	var req models.DeleteMenuReq

	if err := json.Unmarshal(ctrl.Ctx.Input.RequestBody, &req); err != nil {
		ctrl.ERROR(err.Error())
		return
	}

	has, _ := models.NewMenu().HasChild(req.ID)
	if has {
		ctrl.ERROR("该节点存在子节点，不能删除")
		return
	}

	curUser, _ := ctrl.GetAuthUser()
	if err := models.NewMenu().Remove(req.ID, curUser.UserID); err != nil {
		ctrl.ERROR(err.Error())
		return
	}
	ctrl.OK(nil)
	return
}
